% Practica 1 SC - Apartado 3

close all;
clear all;
clc;

% Creo la senal de entrada:
% Ejemplo 1
%x = 0:0.005:3;
%senal = sin(cos(sin(x)));

% Ejemplo 2
%x= -5:0.05:5;
%senal = tan(x);

% Ejemplo 3
%x1 = -5:0.005:1;
%x2 = 1.05:0.005:5;
%x=[x1 x2];
%senal = [x1.^2+cos(3*x1)./2+sin(x1.^2) sin(4*x2.^2)+(3*x2.^2)];

% Ejemplo 4
%x = 1:0.005:3;
%senal= sin(sin(x).*x*10) + sin(tan(3.2./x));

%Ejemplo 5
%x1 = -5:0.005:0;
%x2 = 0:0.005:3;
%x3 = 3:0.005:6;
%x = [x1 x2 x3];
%senal = [-3*x1+5  (3*x2+5) (1.6*x3.^2)];

% Ejemplo 6
%x1 = -3:0.005:-1;
%x2 = -1:0.005:1;
%x3 = 1:0.005:3;
%x = [x1 x2 x3];
%senal = [sin(2*x1) (-x2.^2+2*x2) cos(sin(x3.^6))];

% Ejemplo 7
x1 = 2:0.05:5;
x2 = 5.05:0.05:10;
x=[x1 x2];
senal = [sin(x1/5) 5 + cos((x2.^2)/8)];

% Ejemplo 8
%x1=0:0.01:2;
%x2=2.01:0.01:3;
%x3=3.01:0.01:4.875;
%x = [x1 x2 x3];
%senal=[cos(pi.*x1) (3-x2) (2.*sin(4.*pi.*x3))];

% Creo la red:
PR = [min(x) max(x);min(x) max(x);min(x) max(x)];
S = 1;
ID = 0;
LR = maxlinlr(x)';

red = NEWLIN(PR,S,ID,LR);

red.adaptParam.goal = 0.0001;
red.adaptParam.passes = 3;

% Inicializo los pesos:
for i=1:3,
    peso(i,1) = rand;
end

% Patrones
for i = 1:(length(x)-3),
    p(1,i) = senal(i);
    p(2,i) = senal(i+1);
    p(3,i) = senal(i+2);
    s(i) = senal(i+3);
end

P=con2seq(p);
S=con2seq(s);

% Almaceno los pesos en la red
red.iw{1} = [peso(1,1) peso(2,1) peso(3,1)];

% Entrenamiento de la red:
[red,Y,E] = adapt(red,P,S);
%peso(1:3,:) = red.iw{1,1};

%figure(1);
%plot(senal,'r');
%title('Senal de entrada');
%xlabel('Valor de x');
%ylabel('Valor de la senal');

%figure(2);
%plot(senal,'r');
%hold on;
%plot(cat(2,Y{:}),'g--');
%hold off;
%legend('Senal','prediccion');

%figure(3);
%plot(cat(2,E{:}),'b-');
%xlabel('Tiempo');
%ylabel('Valor del error');
%title('Variacion del error respecto al tiempo');

figure(7);
plot(senal,'r');
title('Senal de entrada');
xlabel('Valor de x');
ylabel('Valor de la senal');
figure(8);
subplot(211);
plot(senal,'r');
hold on;
plot(cat(2,Y{:}),'g--');
hold off;
legend('Senal','prediccion');
grid;
subplot(212);
plot(cat(2,E{:}),'b-');
xlabel('Tiempo');
ylabel('Valor del error');
title('Variacion del error respecto al tiempo');
grid;
